// 编写完整程序，一个小朋友喜欢掷子，子一共有10面，且小朋友有 10个玩具，玩具编号依次为1-10，对应于子的号数。
// 规定初始时，玩具从1-10顺序排序，之后小朋友玩m把游戏，每一次游戏投一次骰子，
// 小朋友将对应的骰子号的玩具移动到最前端(链表的形式存放玩具)，
// 要求写三个独立的功能分别实现:初始化玩具、玩游戏、输出玩具编号。
// 输入格式为玩游戏的次数以及每次骰子号数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct Toy{
	int num;
	struct Toy *next;
}Toy;

// 使用带有头结点的实现方式
void InitToys(Toy **toys){

	// 这两句顺序不能反。
	*toys = (Toy *)malloc(sizeof(Toy));
	Toy *p = *toys;

	p->num = 0;
	for(int i=1;i<=10;i++){
		p->next = (Toy *)malloc(sizeof(Toy));
		p = p->next;
		p->num = i;
	}
	p->next = NULL;
}


void playsGames(Toy **toys){
	
	int num;
	srand((unsigned)time(NULL));
	num = rand()%10 + 1;
	printf("选中%d号\n",num);

	Toy *p = *toys;
	Toy *pre = NULL;
	while(p->next != NULL){
		if (p->next->num == num){
			pre = p;
		}
		p = p->next;
	}
	Toy *q = pre->next;
	pre->next = q->next;
	p->next = q;
	q->next = NULL;
}


void showToys(Toy *toys){
	printf("现在的序号是：");
	Toy *p = toys->next;
	while(p != NULL){
		printf("%d ",p->num);
		p = p->next;
	}
	printf("\n");
}


int main(){
	Toy * toys;
	InitToys(&toys);
	playsGames(&toys);
	showToys(toys);
	return 0;
}


